home *** CD-ROM | disk | FTP | other *** search
/ SunSoft Catalyst CDWARE 1996 May to August / Catalyst CDWARE 1996 May to August.iso / .products / JavaWorld / javaworld / cgi-bin / jw-np-mailto.cgi < prev    next >
Text File  |  1996-02-15  |  7KB  |  216 lines

  1. #!/usr/local/bin/perl
  2. # jw-np-mailto.cgi - script to process e-mail sent from JavaWorld's
  3. # new-products page. this is a kludge until the html mailto becomes ubiquitous.
  4. #
  5. # usage: jw-np-mailto.cgi <recipient> [ <return href> <return tag> | send ]
  6. #
  7. # if 'send' is the last command-line argument, jw-np-mailto.cgi assumes
  8. # that it is to send the enclosed datastream to the recipient denoted by
  9. # the first command-line argument. otherwise, it interprets the second
  10. # and third command-line arguments as a return href and tag for 'back-to'
  11. # functionality.
  12. #
  13. # it's fairly crucial that the e-mail address does not contain +
  14. # signs, as this will confuse jw-np-mailto.cgi's interpretation of
  15. # command-line arguments.
  16. #
  17. # complain to david.burnette@javaworld.com if there are problems.
  18.  
  19.  
  20. if ("$ARGV[$#ARGV]" eq "send") { # send e-mail message
  21.  
  22.    $defaultfrom="javaworld\@javaworld.com";
  23.    $defaultname="JavaWorld";
  24.    $mailprog="/usr/lib/sendmail";
  25.    $bcc="jwbcc\@javaworld.com"; # recipient of failsafe copy
  26.    $bccname="JW bcc";
  27.    $bccsubject="bccmail to $ARGV[0]\@$ARGV[1]";
  28.    $date=`date`; chop($date);
  29.  
  30.    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  31.  
  32.    if (@ARGV < 3) {
  33.       $recipient="david.burnette\@javaworld.com";
  34.       $href1="/index.html";
  35.       $src1="/icons/b-thismonth.gif";
  36.       $alt1="[This month's table of contents]";
  37.    }
  38.    elsif (@ARGV == 3) {
  39.       $recipient="$ARGV[0]\@$ARGV[1]";
  40.       $href1="/index.html";
  41.       $src1="/icons/b-thismonth.gif";
  42.       $alt1="[This month's table of contents]";
  43.    }
  44.    elsif (@ARGV == 4) {
  45.       $recipient="$ARGV[0]\@$ARGV[1]";
  46.       $href1="$ARGV[2]";
  47.       $src1="/icons/b-thismonth.gif";
  48.       $alt1="[This month's table of contents]";
  49.    }
  50.    else {
  51.       $recipient="$ARGV[0]\@$ARGV[1]";
  52.       $href1="/index.html";
  53.       $src1="/icons/b-thismonth.gif";
  54.       $alt1="[This month's table of contents]";
  55.       $href2="$ARGV[2]#$ARGV[3]";
  56.       $src2="/icons/b-backtostory.gif";
  57.       $alt2="[Back to story]";
  58.    }
  59.  
  60.    $HREF1="<A HREF=\"$href1\"><IMG SRC=\"$src1\" ALT=\"$alt1\"></A>";
  61.    $HREF2="<A HREF=\"$href2\"><IMG SRC=\"$src2\" ALT=\"$alt2\"></A>" if defined($href2);
  62.  
  63.  
  64.    # Split the name-value pairs
  65.    @pairs = split(/&/,$buffer);
  66.  
  67.    foreach $pair (@pairs)
  68.    {
  69.       ($name,$value) = split(/=/,$pair);
  70.       $value =~ tr/+/ /;
  71.       $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  72.  
  73.       # Stop people from using subshells to execute commands
  74.       $value =~ s/~!/ ~!/g; 
  75.  
  76.       $FORM{$name} = $value;
  77.    }
  78.  
  79.  
  80.    # check for empty message; thwart bastards
  81.  
  82.    if ($FORM{'name'} =~ /^[\s]*$/ || $FORM{'email'} =~ /^[\s]*$/ || $FORM{'message'} =~ /^[\s]*$/) {
  83.       print "Content-TYPE: text/html\n\n";
  84.       print "<HTML>\n";
  85.       print "<HEAD><TITLE>JavaWorld-E-mail Form</TITLE></HEAD>\n";
  86.       print "<BODY>\n";
  87.       print "<H3>An empty message cannot be sent. It must contain a name, e-mail address, and message.</H3>\n";
  88.       print "<H3>To send a message, return to the mail form by hitting your browser\'s back button.</H3>\n";
  89.       print "</BODY>\n";
  90.       print "</HTML>\n";
  91.    }
  92.    else {  # send thank-you note to browser
  93.  
  94.       print "Content-TYPE: text/html\n\n";
  95.       print "<HTML>\n";
  96.       print "<HEAD><TITLE>JavaWorld</TITLE></HEAD>\n";
  97.       print "<BODY>\n";
  98.       print "$HREF1$HREF2\n";
  99.       print "<H3>Thank you for sending mail to $recipient. We appreciate your patronage.</H3>\n";
  100.       print "</BODY>\n";
  101.       print "</HTML>\n";
  102.  
  103.  
  104.       # send failsafe copy of raw data to bcc
  105.  
  106.       open(MAIL,"|$mailprog $bcc") || die "cannot open $mailprog\n";
  107.       print MAIL "From: $bcc ($bccname)\n";
  108.       print MAIL "To: $bcc\n";
  109.       print MAIL "Subject: $bccsubject\n\n";
  110.       print MAIL "BEGIN RECORD $date\n";
  111.       print MAIL "recipient=$recipient\n";
  112.       print MAIL "href1=$href1\n";
  113.       print MAIL "src1=$src1\n";
  114.       print MAIL "alt1=$alt1\n";
  115.       print MAIL "href2=$href2\n";
  116.       print MAIL "src2=$src2\n";
  117.       print MAIL "alt2=$alt2\n";
  118.       print MAIL "CONTENT_LENGTH=$ENV{'CONTENT_LENGTH'}\n";
  119.       print MAIL "CONTENT_TYPE=$ENV{'CONTENT_TYPE'}\n";
  120.       print MAIL "DOCUMENT_ROOT=$ENV{'DOCUMENT_ROOT'}\n";
  121.       print MAIL "GATEWAY_INTERFACE=$ENV{'GATEWAY_INTERFACE'}\n";
  122.       print MAIL "HTTP_REFERER=$ENV{'HTTP_REFERER'}\n";
  123.       print MAIL "HTTP_USER_AGENT=$ENV{'HTTP_USER_AGENT'}\n";
  124.       print MAIL "QUERY_STRING=$ENV{'QUERY_STRING'}\n";
  125.       print MAIL "REMOTE_ADDR=$ENV{'REMOTE_ADDR'}\n";
  126.       print MAIL "REMOTE_HOST=$ENV{'REMOTE_HOST'}\n";
  127.       print MAIL "REQUEST_METHOD=$ENV{'REQUEST_METHOD'}\n";
  128.       print MAIL "SCRIPT_NAME=$ENV{'SCRIPT_NAME'}\n";
  129.       print MAIL "SERVER_NAME=$ENV{'SERVER_NAME'}\n";
  130.       print MAIL "SERVER_PORT=$ENV{'SERVER_PORT'}\n";
  131.       print MAIL "SERVER_PROTOCOL=$ENV{'SERVER_PROTOCOL'}\n";
  132.       print MAIL "SERVER_SOFTWARE=$ENV{'SERVER_SOFTWARE'}\n";
  133.       print MAIL "ARGV=@ARGV\n";
  134.       print MAIL "STDINDATA=$buffer\n";
  135.       print MAIL "END RECORD $date\n";
  136.       close(MAIL);
  137.  
  138.  
  139.       # send mail to $recipient
  140.  
  141.       open(MAIL,"|$mailprog $recipient") || die "cannot open $mailprog\n";
  142.       print MAIL "From: $FORM{'email'} ($FORM{'name'})\n";
  143.       print MAIL "To: $recipient\n";
  144.       print MAIL "Subject: $FORM{'subject'}\n\n";
  145.       print MAIL "$FORM{'message'}\n";
  146.       print MAIL "\n------------------------------------------------------------\n\n";
  147.       print MAIL "New products e-mail from JavaWorld (http://www.javaworld.com)\n\n";
  148.       print MAIL "Remote host: $ENV{'REMOTE_HOST'}\n";
  149.       print MAIL "Remote IP address: $ENV{'REMOTE_ADDR'}\n";
  150.       print MAIL "Server name: $ENV{'SERVER_NAME'}\n";
  151.       print MAIL "Browser: $ENV{'HTTP_USER_AGENT'}\n";
  152.       print MAIL "HTTP_REFERER: $ENV{'HTTP_REFERER'}\n";
  153.       close(MAIL);
  154.  
  155.    } # end of if bastard else sendmail
  156.  
  157.    exit(0);
  158. }
  159. else {  # present message form to browser
  160.  
  161.    if (@ARGV < 2) {
  162.       $recipient="webmaster\@javaworld.com";
  163.       $href="/index.html";
  164.    }
  165.    elsif (@ARGV == 2) {
  166.       $recipient="$ARGV[0]\@$ARGV[1]";
  167.       $href="/index.html";
  168.    }
  169.    elsif (@ARGV == 3) {
  170.       $recipient="$ARGV[0]\@$ARGV[1]";
  171.       $href="$ARGV[2]";
  172.    }
  173.    else {
  174.       $recipient="$ARGV[0]\@$ARGV[1]";
  175.       $href="$ARGV[2]+$ARGV[3]";
  176.    }
  177.  
  178.    $banner="Send mail to $recipient";
  179.  
  180.    print <<END_OF_FORM;
  181. Content-TYPE: text/html
  182.  
  183. <HTML>
  184. <HEAD><TITLE>JavaWorld E-mail Form</TITLE></HEAD>
  185. <BODY>
  186. <FORM METHOD=POST ACTION="http://www.javaworld.com/cgi-bin/jw-np-mailto.cgi?$ARGV[0]+$ARGV[1]+$href+send">
  187. <P>
  188. <BLOCKQUOTE>
  189. <H2><EM>JavaWorld</EM> is an independent publication of IDG Communications.</H2>
  190. </BLOCKQUOTE>
  191. <P>
  192. <CENTER><H2>$banner</H2></CENTER>
  193. <P>
  194. <STRONG>Your Name:</STRONG>
  195. <INPUT TYPE="text" NAME="name" SIZE ="40">
  196. <P>
  197. <STRONG>Your e-mail address:</STRONG>
  198. <INPUT TYPE="text" NAME="email" SIZE ="40">
  199. <P>
  200. <STRONG>Subject:</STRONG>
  201. <INPUT TYPE="text" NAME="subject" SIZE ="40">
  202. <P>
  203. <STRONG>Please enter your message below:</STRONG><BR>
  204. <TEXTAREA COLS=60 ROWS=10 NAME="message"></TEXTAREA>
  205. <BR>
  206. <INPUT TYPE="submit" VALUE="Send message">
  207. <INPUT TYPE="reset" VALUE="Clear form"</P>
  208. </FORM>
  209. </BODY>
  210. </HTML>
  211. END_OF_FORM
  212.  
  213.    exit(0);
  214. }
  215.  
  216.